import copy  # 导入

'''深拷贝'''
# 如果被拷贝对象 有 N 层（嵌套列表），那么深拷贝之后对象，是一个完全的独立的新对象，无论做什么修改，都不会影响源对象
# 原对象永远不变，变得只是深拷贝之后的
ls = [1, 2, 3, 4, [5, 6, 7, [8, 9, ['a', 'b']]]]
deep_ls = copy.deepcopy(ls)
print(deep_ls)
deep_ls[0] = 0
print(ls,deep_ls)

'''浅拷贝'''
# 如果被拷贝对象 有 N 层，那么拷贝之后对象仅仅是拷贝了源对象的第一层
# 只有第一层是完全独立，里边N-1层是与源对象互通的（共用一个内存地址）
# 原对象只有表层是拷贝了修改互不影响，其他层原对象是有影响的
shallow_ls = copy.copy(ls) # 构造浅拷贝对象
shallow_ls[0] = 0
print(ls,shallow_ls)
shallow_ls[4][0] = '5'
print(ls,shallow_ls)
ls[4][1] = '6'
print(ls,shallow_ls)